package com.misyi.designpattern.factory.abstractfactory;

/**
 * 没有使用抽象工厂模式
 *
 * @author licong
 * @date 2021-09-11 上午11:33
 */
public class WithoutAbstractFactoryPatternDemo {


    public static void main(String[] args) {
        // 产品 A1 和 B1 的组合
//        ProductA productA1 = new ProductA1();
//        ProductB productB1 = new ProductB1();
//        productA1.execute();
//        productB1.execute();

        // 假设现在需要将 A1 和 B1 的组合修改为 A3 和 B3
        // 此时需要修改调用处的代码, 将组合修改为需要的代码
        ProductA productA3 = new ProductA3();
        ProductB productB3 = new ProductB3();
        productA3.execute();
        productB3.execute();

        // 产品 A2 和 B2 的组合
        ProductA productA2 = new ProductA1();
        ProductB productB2 = new ProductB1();
        productA2.execute();
        productB2.execute();
    }

    public interface ProductA {
        void execute();
    }

    public interface ProductB {
        void execute();
    }


    public static class ProductA1 implements ProductA {

        @Override
        public void execute() {
            System.out.println("产品 A1 的功能逻辑");
        }
    }

    public static class ProductA2 implements ProductA {

        @Override
        public void execute() {
            System.out.println("产品 A2 的功能逻辑");
        }
    }

    public static class ProductA3 implements ProductA {

        @Override
        public void execute() {
            System.out.println("产品 A3 的功能逻辑");
        }
    }

    public static class ProductB1 implements ProductB {

        @Override
        public void execute() {
            System.out.println("产品 B1 的功能逻辑");
        }
    }

    public static class ProductB2 implements ProductB {

        @Override
        public void execute() {
            System.out.println("产品 B2 的功能逻辑");
        }
    }

    public static class ProductB3 implements ProductB {

        @Override
        public void execute() {
            System.out.println("产品 B3 的功能逻辑");
        }
    }
}
